import store from '@/store/index.js';
import API_CONFIG from '@/common/config.js'

function service(options = {}) {
	let loadingOptions = {
		loading: true,
		showTips: true,
		isUpoad: false, //是否上传接口
		...options,
		...options.data
	};
	options = {
		baseUrl: API_CONFIG.API_BASE_URL,
		...options
	};
	if (loadingOptions.loading) {
		store.state.showLoading = true;
	}

	//配置基础的网络请求域名
	options.url = `${options.baseUrl}/api${options.url}`;


	//获取本地存储用户token，并判断网络请求逻辑
	//console.log("请求地址", options.url)
	const userToken = uni.getStorageSync('userToken');
	if (userToken) {
		options.header = {
			///'content-type': 'application/json',
			Authorization: 'Bearer ' + userToken, // 这里是token(可自行修改)
		};
	}
	return new Promise((resolved, rejected) => {
		options.success = (res) => {
			console.log(res);
			//console.log("res", res);
			if (res.statusCode == 500) {
				uni.showToast({
					icon: 'none',
					duration: 3000,
					title: '服务器错误,请稍后再试',
				});
				return
			} else if (res.statusCode == 401 || res.statusCode == 402) { //登录失效
				// 清除本地token
				uni.clearStorageSync();
				// 关闭所有页面返回到登录页
				uni.reLaunch({
					url: '/pages/user/login/login',
				});
				return
			}


			if (options.isUpoad && res.data) res.data = JSON.parse(res.data)
			// 如果请求回来的状态码不是200则执行以下操作
			if (res.data.code && res.data.code !== 200) {
				// 非成功状态码弹窗
				if (loadingOptions.showTips) {
					uni.showToast({
						icon: 'none',
						duration: 3000,
						title: `${res.data.message}`,
					});
				}

				// 返回错误信息
				rejected(res);
			} else {

				// 请求回来的状态码为200则返回内容
				if (options.method != 'GET' && loadingOptions.showTips) {
					// setTimeout处理了showToast和showLoading冲突的问题
					setTimeout(() => {
						uni.showToast({
							title: res.data.message,
							icon: 'none',
							duration: 1500,
						});
					}, 0);
				}
				resolved(res.data.result || res.data.data);
			}
			//console.log("无内容"+options.url,res)
		};
		options.fail = (err) => {
			// 请求失败弹窗
			uni.showToast({
				icon: 'none',
				duration: 3000,
				title: '服务器错误,请稍后再试',
			});
			rejected(err);
		};
		options.complete = () => {
			console.log('请求结束', store.state.showLoading);
			uni.hideLoading();
			if (loadingOptions.loading) {
				setTimeout(() => {
					store.state.showLoading = false;

					console.log('请求结束', store.state.showLoading);
				}, 2000);
			}
		};
		let request = options.isUpoad ? uni.uploadFile : uni.request
		//console.log("options", options)
		request(options)
		//uni.request(options);
	});
}

export default service;